<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: 流年 <liu21st@gmail.com>
// +----------------------------------------------------------------------

// 应用公共文件

/**
 * api返回信息
 * @param $status 状态[成功或失败]
 * @param $msg 提示信息
 * @param array $data 数据
 * @param int $code 状态码
 * @return \think\response\Json
 */
function show($status, $msg, $data = [], $code = 200)
{
    $data = [
        'status' => $status,
        'msg' => $msg,
        'data' => $data,
    ];

    return json($data, $code);
}

function yunUpload($file, $dir)
{
    //检测空文件
    if (empty($file)) {
        return json(config('code.error'), '文件不存在', [], 404);
    }
    //检测图片大小、格式
    $file_validate = $file->check(['size' => 10485760, 'ext' => 'jpg,png,jpeg,gif']);
    //判断文件是否合格
    if (empty($file_validate)) {
        return show(config('code.error'), '文件格式错误', [], 400);
    }
    //获取文件原名
    $file_name = $file->getInfo()['name'];
    //获取临时文件保存路径(即获取文件)
    $file_path = $file->getRealPath();
    //格式化日期
    $time = date('Y-m-d');
    //获取文件信息
    $new_name = pathinfo($file_name);

    //拼接文件名
    $file_url = $dir . '/' . $time . '/' . sha1($file_name . time()) . '.' . $new_name['extension'];

    $result = [
        'file_path' => $file_path,
        'file_url' => $file_url
    ];

    return json_encode($result);
}

/**
 * 无限极分层
 * @param $data
 * @param int $pid
 * @param int $level
 * @return array
 */
function tree($data, $pid = 0, $level = 1)
{
    static $list = [];
    foreach ($data as $k => $v) {
        if ($pid == $v['pid']) {
            $v['level'] = $level;
            $list[]     = $v;
            tree($data, $v['id'], $level + 1);
        }
    }
    return $list;
}

/*
**
* 构建层级（树状）数组
* @param array $array 要进行处理的一维数组，经过该函数处理后，该数组自动转为树状数组
* @param string $pid_name 父级ID的字段名
* @param string $child_key_name 子元素键名
* @return array|bool
    */
function array2tree(&$array, $pid_name = 'pid', $child_key_name = 'children')
{

    $array   = is_object($array) ? $array->toArray() : $array;
    $counter = array_children_count($array, $pid_name);

    if (!isset($counter[0]) || $counter[0] == 0) {
        return $array;
    }

    $tree = [];
    while (isset($counter[0]) && $counter[0] > 0) {
        $temp = array_shift($array);
        if (isset($counter[$temp['id']]) && $counter[$temp['id']] > 0) {
            array_push($array, $temp);
        } else {
            if ($temp[$pid_name] == 0) {
                $tree[] = $temp;
            } else {
                $array = array_child_append($array, $temp[$pid_name], $temp, $child_key_name);
            }
        }
        $counter = array_children_count($array, $pid_name);
    }

    return $tree;
}

/**
 * 子元素计数器
 * @param array $array
 * @param int $pid
 * @return array
 */
function array_children_count($array, $pid)
{
    $counter = [];
    foreach ($array as $item) {
        $count = isset($counter[$item[$pid]]) ? $counter[$item[$pid]] : 0;
        $count++;
        $counter[$item[$pid]] = $count;
    }

    return $counter;
}

/**
 * 把元素插入到对应的父元素$child_key_name字段
 * @param        $parent
 * @param        $pid
 * @param        $child
 * @param string $child_key_name 子元素键名
 * @return mixed
 */
function array_child_append($parent, $pid, $child, $child_key_name)
{
    foreach ($parent as &$item) {
        if ($item['id'] == $pid) {
            if (!isset($item[$child_key_name])) {
                $item[$child_key_name] = [];
            }
            $item[$child_key_name][] = $child;
        }
    }

    return $parent;
}

function status($status)
{
    if($status == 0){
        $str = '<span class="layui-btn layui-btn-normal layui-btn-mini">隐藏</span>';
    }

    if($status ==1 ){
        $str = '<span class="layui-btn layui-btn-normal layui-btn-mini">显示</span>';
    }
    return $str;
}